package com.zyh.langchain4j.aiservice;

import dev.langchain4j.service.MemoryId;
import dev.langchain4j.service.SystemMessage;
import dev.langchain4j.service.UserMessage;
import dev.langchain4j.service.V;
import dev.langchain4j.service.spring.AiService;
import reactor.core.publisher.Flux;


@AiService(
//        wiringMode = AiServiceWiringMode.EXPLICIT,//手动装配
//        chatMemory = "openAiChatModel",//指定模型
        streamingChatModel = "openAiStreamingChatModel",//流式
//        chatMemory = "chatMemory",//会话记忆
        chatMemoryProvider = "chatMemoryProvider",//配置会话记忆提供者
        contentRetriever = "contentRetriever",//向量数据库内容检索对象
        tools = "reservationTool"//执行函数
)
//@AiService
public interface ConsultantService {
    /**
     * 会话记忆--隔离
     */
    Flux<String> memoryIdStreamChat(@MemoryId String memoryId, @UserMessage String message);

    /**
     * 会话记忆
     */
    Flux<String> memoryStreamChat(String message);

    /**
     * 用于聊天--给ai设置角色：系统
     */
//    @SystemMessage("你是周宇航的女朋友，你叫胖静，温柔善良又多金")//直接写参数
    @SystemMessage(fromResource = "system.txt")
//指定文件
    Flux<String> sysStreamChat(String message);

    /**
     * 用于聊天
     */
//    @SystemMessage("你是周宇航的女朋友，你叫胖静，温柔善良又多金")//直接写参数
//    @UserMessage("你是周宇航的女朋友，你叫胖静，温柔善良又多金!{{it}}")//{{it}}默认写法，不可修改
    @UserMessage("你是周宇航的女朋友，你叫胖静，温柔善良又多金!{{msg}}")
//@V("msg")获取
    Flux<String> userStreamChat(@V("msg") String message);

    /**
     * 用于聊天--流式
     */
    Flux<String> streamChat(String message);

    /**
     * 用于聊天
     */
//    String chat(String message);

}
